1. Technical Field
The present invention generally relates to the field of microprocessor development, and more particularly to techniques for automating the production of a hierarchical processor/architecture description language representation of a microprocessor.
2. Background Information
A microprocessor acts as the “brain” of a computer, processing instructions at a high rate; the prior art is replete with various microprocessor designs, architectures, configurations, processing schemes, and coding techniques. The power of a microprocessor is its ability to perform instructions very quickly. In order to process an instruction, a microprocessor requires the information to be in a particular format, called a “machine language.” This machine language, which is the basic binary language for the computer instructions, differs depending on the specific microprocessor. Although microprocessors utilize binary machine language, it is much easier to write instructions for a computer if the instructions are alphanumeric, a format more easily understood by humans. This can be done through the use of “high-level languages,” such as C++ and BASIC, or assembly language. Assembly language is more directly related to a microprocessor's machine language as each assembly language instruction represents a machine language instruction with mnemonic text instead of a binary format.
Microprocessor designers balance many considerations during the development of a microprocessor. One important consideration is the actual functionality of the microprocessor. A microprocessor must have a plurality of instructions to be useful. The term “instruction set” is used for the set of all of the instructions utilized by a microprocessor. The description of the instruction set and the functions of each instruction is called an “instruction set architecture” (“ISA”). An ISA is generally viewed in terms of three portions: the assembly language mnemonic for each of the instructions, the machine language encoding of the instructions, and the operation of the instruction.
Designers traditionally describe the ISA of a processor/architecture in terms of an opcode summary table. An opcode summary table is a table which lists the assembly language mnemonic for each instruction, the machine language bit pattern encoding for each instruction, and the position of the operands within the instruction.
Each bit in an instruction has a different function. The portion of the instruction that determines which instruction is to be performed is termed the opcode. For a simple instruction set, the opcode may take 6 bits out of the 32 bits available for each instruction. The operand is the remainder of the instruction and determines, for example, what register is being operated upon, or what memory location is to be accessed.
When designing a new microprocessor, the designers must be able to test their designs to find any problems and optimize the performance. Testing the designs involves the use of assemblers, compilers, and simulators (“programming tools”) to test the operation of the microprocessor. An assembler is a program that translates assembly language mnemonics to the processor's machine language. A compiler transforms a high-level language, such as BASIC or C++, to the processor's machine language. A simulator simulates the operation of the microprocessor by performing each function of the microprocessor on an already existing computing platform. A simulator thus enables one to test a microprocessor without having to first physically build it.
To automate the creation of those programming tools, several Architecture Description Languages (“ADL”) have been developed, such as nML, ISDL, LISA, and RADL. It is possible to describe each instruction using an ADL. For many instruction sets, however, similar instructions have similar machine language formats with common shared fields. Using an ADL, one can group similar instructions together to create a more compact representation of the processor. This compact representation is also less prone to errors because similar groups of instructions need be described only once, with only the differences further delineated.
The power of an ADL lies in the fact that, using an ADL description of a microprocessor, one can automatically create various programming tools for that processor. In order to create, for example, an assembler for a microprocessor, one may write a program in ADL that describes the microprocessor. Then, an assembler generator could be used to create an assembler from the ADL description of the microprocessor. In order to create a simulator, one would also need to input the behavior of each instruction into the ADL description into the simulator generator.
In the past, the creation of an ADL description of a microprocessor was manually performed by a person, given the assembly language instructions and its machine language representation. However, when developing new microprocessors, the manual creation of these programs can delay the development of the new microprocessors by two to three weeks.
After the programming tools are created, the new microprocessor is tested. Once tested, the design may be improved in various ways, including modifying the instruction set. Once the product is improved, new programming tools must be created, which results in additional delays associated with the re-coding of the ADL. Furthermore, the ADL code must be debugged before it can reliably be used to test the microprocessor.
Another problem with the ADL is the learning curve. A microprocessor designer would have to learn how to code in a language that may be new to them. A microprocessor designer may be more concerned with producing the physical embodiment of the microprocessor chip, rather than the production of programming tools. Many designers are also more comfortable with the traditional methods of describing a microprocessor, such as an opcode summary table. Thus, many designers spend their time producing documentation related to the operation of the microprocessor.
To facilitate the design of microprocessors, it is desirable to automate the process of producing an ADL representation of a microprocessor.